package;

import flixel.FlxG;
import flixel.FlxSprite;
import flixel.FlxState;
import flixel.group.FlxTypedGroup;
import flixel.text.FlxText;
import flixel.ui.FlxButton;
import flixel.util.FlxMath;
import flixel.util.FlxColor;
import flixel.util.FlxPoint;

/**
 * A FlxState which can be used for the actual gameplay.
 */
class MenuState extends FlxState
{
	
//---Para todos los Botones-------------

	private var _buttonsWidth = 240;
	
//----Version de Editor-----------------------------

	private var _editorButton:FlxButton;
	
//----Botones relacionados a comenzar un juego------

	private var _newGameButton:FlxButton;

	private var _continueButton:FlxButton;

//----Relacionados al Menu de Opciones------------------
	
	private var _optionsButton:FlxButton;
	
//----Botones relacionados a salir----------------

	//--Ventana principal del Menu-----
	private var _quitButton:FlxButton;
	
	//---Segunda Ventana del Menu-------------
	private var _sureWantQuitButton:FlxButton;   //¿De seguro quieres salir?
	private var _cancelWantQuitButton:FlxButton;
	
	//Grafica de la ventana secundaria del Menu
	private var _graficWindow:FlxSprite;
	
	//Texto que pregunta si realmente quere salir?
	private var _quitText:FlxText;
	
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
	
	 override public function create():Void
	{
		super.create();
		
//-------Constructores, graficos y adicion de los botones en general---------------------------------
{
		_newGameButton = new FlxButton(FlxG.width / 2 - _buttonsWidth / 2, 60, "NEW GAME", NewGame);
		_newGameButton.makeGraphic(_buttonsWidth, 40);
		add(_newGameButton);
		
		_continueButton = new FlxButton(FlxG.width / 2 - _buttonsWidth / 2, 140, "CONTINNUE", Continue);
		_continueButton.makeGraphic(_buttonsWidth, 40);
		add(_continueButton);
		
		_optionsButton = new FlxButton(FlxG.width / 2 - _buttonsWidth / 2, 220, "OPTIONS", Options);
		_optionsButton.makeGraphic(_buttonsWidth, 40);
		add(_optionsButton);
		
		_editorButton = new FlxButton(FlxG.width / 2 - _buttonsWidth / 2, 300, "EDITOR", Editor);
		_editorButton.makeGraphic(_buttonsWidth, 40);
		add(_editorButton);
		
		_quitButton = new FlxButton(FlxG.width / 2 - _buttonsWidth / 2, 380, "QUIT", Quit);
		_quitButton.makeGraphic(_buttonsWidth, 40);
		add(_quitButton);
}		
//-------------Ventana que aparece al precionar que se quiere Salir del Juego-------------------------------------------------------
{			
		//------Grafico de la ventana cuando queres salir------------------------------
		_graficWindow = new FlxSprite(FlxG.width * (2 / 7) - 20, FlxG.height / 2 - 80);
		_graficWindow.makeGraphic(Std.int(FlxG.width * (2 / 7 + 40)), 100, FlxColor.RED);
		_graficWindow.visible = false;
		add(_graficWindow);
		
		//-------Texto de la ventana que pregunta si realmente queres salir del juego-------------
		_quitText = new FlxText(FlxG.width / 2 - FlxG.width * (2 / 7), FlxG.height / 2 - 160, FlxG.width * (5 / 7), "Are you sure you want to Quit?", 20);
		_quitText.visible = false;
		add(_quitText);
		
		//---------Confirma que quieres Salir------------------------------------------------------------------------------------
		_sureWantQuitButton = new FlxButton(FlxG.width * (2 / 7) - _buttonsWidth / 2, FlxG.height / 2 - 40, "Yes", SureWantQuit);
		_sureWantQuitButton.makeGraphic(Std.int(_buttonsWidth / 2), 40);
		_sureWantQuitButton.visible = false;
		add(_sureWantQuitButton);
		
		//---------No estas seguro de que queres Salir------------------------------------------------------------------------------
		_cancelWantQuitButton = new FlxButton(FlxG.width  * (6 / 7) - _buttonsWidth / 2, FlxG.height / 2 - 40, "No", CancelWantQuit);
		_cancelWantQuitButton.makeGraphic(Std.int(_buttonsWidth / 2), 40);
		_cancelWantQuitButton.visible = false;
		add(_cancelWantQuitButton);
}		
	}
	
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
	
	override public function destroy():Void
	{
		super.destroy();
	}
	
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------

	override public function update():Void
	{
		super.update();
		
		/*
		 * Debe hacer que si no hay una partida guardada el Continue este en "Disable" y si hay alguna partida guardada el  
		 * NewGame este en "Disable", para que no se pueda volver a empezar el juego.
		 * 
		 */
	}	

//---------------------------------------------------------------------------
//---------------------------------------------------------------------------

	private function NewGame():Void //Nos lleva al PlayState con un juego totalmente nuevo desde el nivel 1
	{
		FlxG.switchState(new PlayState());
	}
	

//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
	
	private function Options():Void //Abre el menu de Opciones en el Menu principal
	{
		
	}
	
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------

	private function Continue():Void //Rescata el utlimo save de las partidas guardadas y lo ejecuta en el PlayState
	{
		FlxG.switchState(new PlayState());
	}
	
//---------------------------------------------------------------------------
//TODAS LAS FUNCIONES QUE TIENEN QUE VER CON LA VENTANA DEL QUIT ESTAN EN ESTE BLOQUE
//---------------------------------------------------------------------------

	private function CancelWantQuit():Void //Vuelve al Menu principal original
	{
		_sureWantQuitButton.visible = false;
		_cancelWantQuitButton.visible = false;
		_quitText.visible = false;
		_graficWindow.visible = false;
		
		_continueButton.visible = true;
		_editorButton.visible = true;
		_newGameButton.visible = true;
		_optionsButton.visible = true;
		_quitButton.visible = true;
	}
	
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------

	private function SureWantQuit():Void //Nos saca del juego definitivamente
	{
	//	FlxG.
	}
	
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------

	private function Quit():Void //Abre la ventana que nos pregunta si queremos salir del juego realmente
	{
		_sureWantQuitButton.visible = true;
		_cancelWantQuitButton.visible = true;
		_quitText.visible = true;
		_graficWindow.visible = true;
		
		_continueButton.visible = false;
		_editorButton.visible = false;
		_newGameButton.visible = false;
		_optionsButton.visible = false;
		_quitButton.visible = false;
	}
	
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------

	private function Editor():Void //Nos lleva al Estado de Editor
	{
		FlxG.switchState(new EditorState());
	}
	
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------

}